package com.jie.dao;

import com.jie.show.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class UserDao {

    //自动装配上数据源，JdbcTemplate 可以进行一些简单的Sql操作
    @Autowired
    private JdbcTemplate template;


    /**
     * 通过账号获取用户信息
     *
     * @param account 用户的账号
     * @return 数据库查到的数据=> User实体
     */
    public User getUserByAccount(String account) {
        try {
            //查询单行数据用queryForObject() 并通过 new Bean 的形式转换成相应实体，如果查询多行数据就用query()
            //如果根据账号查询到了用户，就把相应的数据转成User实体类，并且返回出去
            return template.queryForObject("select * from login where account = ?", new BeanPropertyRowMapper<>(User.class), account);
        } catch (Exception e) {
            //如果根据账号查询不到用户，并且发生报错，就返回null值
            return null;
        }
    }

    /**
     * 用户注册
     *
     * @param user 传过来的用户信息
     * @return
     */
    public boolean register(User user) {
        try {
            //增删改都用update() 不用 new Bean ，查用  queryForObject()或者query(),如果受到影响的行数大于0说明操作成功
            return template.update("insert into login (name, account, password) values(?, ?, ?)",
                    user.getName(), user.getAccount(), user.getPassword()) > 0;
        } catch (Exception e) {
            return false;
        }
    }

    public User getUserByToken(String token) {
        try {
            return template.queryForObject("select * from login where token = ?", new BeanPropertyRowMapper<>(User.class), token);
        } catch (Exception e) {
            return null;
        }
    }

    public boolean setTokenToUser(String token, Integer id) {
        return template.update("update login set token = ? where id = ?", token, id) > 0;
    }

    public List<User> getMyInfo(){
        try {
            return (List<User>) template.queryForObject("select * from t_chanson", new BeanPropertyRowMapper<>(User.class));

        }catch (Exception e){
            return null;
        }
    }
}
